#!/bin/bash
# SlimVault Installer for macOS — ダブルクリックで起動する GUI インストーラー
set -u

WHEEL_URL="https://slimvault.pages.dev/dist/slimvault-1.0.0-py3-none-any.whl"
DEFAULT_DIR="$HOME/SlimVault"
PLIST="$HOME/Library/LaunchAgents/dev.slimvault.agent.plist"

dialog() {  # $1=text  $2=buttons(AppleScript list)  $3=default button
    osascript -e "display dialog \"$1\" buttons $2 default button \"$3\" with title \"SlimVault セットアップ\"" 2>/dev/null
}

fail() {
    osascript -e "display dialog \"エラーが発生しました:\n\n$1\" buttons {\"閉じる\"} default button \"閉じる\" with title \"SlimVault セットアップ\" with icon stop" >/dev/null 2>&1
    exit 1
}

# ---------- 1) ようこそ ----------
res=$(dialog "SlimVault をインストールします。\n\n使わないファイルは、極限まで小さく。\n使う瞬間、元どおり。\n\nインストールすると、選んだフォルダに入れたファイルが自動で管理されます。使っていないファイルは自動で圧縮され、開いた瞬間に自動で元に戻ります。操作は一切不要です。" '{"キャンセル","インストール"}' "インストール") || exit 0
[[ "$res" == *"インストール"* ]] || exit 0

# ---------- 2) フォルダ選択 ----------
res=$(dialog "自動管理するフォルダを選んでください。\n\n標準: $DEFAULT_DIR" '{"標準フォルダを使う","自分で選ぶ"}' "標準フォルダを使う") || exit 0
if [[ "$res" == *"自分で選ぶ"* ]]; then
    WATCH_DIR=$(osascript -e 'POSIX path of (choose folder with prompt "SlimVault が自動管理するフォルダを選択")' 2>/dev/null) || exit 0
    WATCH_DIR="${WATCH_DIR%/}"
else
    WATCH_DIR="$DEFAULT_DIR"
fi

# ---------- 3) Python 確認 ----------
PYBIN=""
for c in python3 /usr/bin/python3 /opt/homebrew/bin/python3 /usr/local/bin/python3; do
    if command -v "$c" >/dev/null 2>&1 && "$c" -c 'import sys; sys.exit(0 if sys.version_info>=(3,9) else 1)' 2>/dev/null; then
        PYBIN=$(command -v "$c"); break
    fi
done
if [[ -z "$PYBIN" ]]; then
    # macOS は python3 実行で Command Line Tools のインストールが促される
    dialog "Python が見つかりませんでした。\n\n「OK」を押すと Apple のコマンドラインツール(Python 含む)のインストール画面が開きます。完了後、もう一度このインストーラーを実行してください。" '{"OK"}' "OK" >/dev/null
    /usr/bin/python3 --version >/dev/null 2>&1 &
    exit 0
fi

# ---------- 4) インストール ----------
osascript -e 'display notification "インストール中です…(1〜2分)" with title "SlimVault"' 2>/dev/null

"$PYBIN" -m pip install --user --quiet --upgrade "$WHEEL_URL" 2>/dev/null \
  || "$PYBIN" -m pip install --user --quiet --upgrade --break-system-packages "$WHEEL_URL" \
  || fail "SlimVault 本体のインストールに失敗しました。インターネット接続を確認してください。"

mkdir -p "$WATCH_DIR" || fail "フォルダを作成できませんでした: $WATCH_DIR"

# ---------- 5) LaunchAgent (ログイン時自動起動) ----------
mkdir -p "$HOME/Library/LaunchAgents"
cat > "$PLIST" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key><string>dev.slimvault.agent</string>
    <key>ProgramArguments</key>
    <array>
        <string>${PYBIN}</string>
        <string>-m</string>
        <string>slimvault.cli</string>
        <string>watch</string>
        <string>${WATCH_DIR}</string>
    </array>
    <key>RunAtLoad</key><true/>
    <key>KeepAlive</key><true/>
    <key>StandardOutPath</key><string>/tmp/slimvault.log</string>
    <key>StandardErrorPath</key><string>/tmp/slimvault.err</string>
</dict>
</plist>
EOF
launchctl unload "$PLIST" 2>/dev/null || true
launchctl load "$PLIST" 2>/dev/null || fail "自動起動の登録に失敗しました。"

# ---------- 6) 完了 ----------
dialog "インストールが完了しました!🎉\n\n$WATCH_DIR\n\nこのフォルダに入れたファイルは、使わないとき自動で極限まで圧縮され、開いた瞬間に自動で元に戻ります。操作は一切不要です。" '{"フォルダを開く"}' "フォルダを開く" >/dev/null
open "$WATCH_DIR"
exit 0
